Si tenemos una cantidad grande de datos, como por ejemplo:
Podemos agrupar por intervalos y hacer una resumen de los datos para facilitar su lectura. Para este propósito veremos en está sección las tablas de frecuencia para datos agrupados.
Definición [Tabla de Frecuencias] : Es un resumen en forma de tabla que muestra el número de elementos \((frecuencia)\) en cada una de las diferentes clases o intervalos.
Las clases o intervalos deben ser disyuntos.
En la tabla se muestran las cantidades y los porcentajes de cada una de las medidas.
Permite conocer la manera en que están distribuidos los datos.
Observación
| Intervalo o clase \(\large{I_i}\) | Frecuencia Absoluta \(\large{(n_i)}\) | Frecuencia Abs. Acumulada \(\large{(N_i)}\) | Frecuencia Relativa \(\large{(f_i=\frac{n_i}{N})}\) | Frecuencia Rel. Acumulada \(\large{(F_i)}\) |
|---|---|---|---|---|
| \(I_1=[a_1,a_2)\) | \(n_1\) : número de elementos en \(I_1\) | \(N_1=n_1\) | \(\large{f_1=\dfrac{n_1}{N}}\) | \(\large{F_1=f_1}\) |
| \(I_2=[a_2,a_3)\) | \(n_2\) : número de elementos en \(I_2\) | \(N_2=n_1+n_2\) | \(\large{f_2=\dfrac{n_2}{N}}\) | \(\large{F_2=f_1+f_2}\) |
| \(\dots\) | \(\dots\) | \(\dots\) | \(\dots\) | \(\dots\) |
| \(I_k=[a_{k-1},a_{k})\) | \(n_k\) : número de elementos en \(I_k\) | \(N_k=n_1+n_2+ \dots + n_k\) | \(\large{f_k=\dfrac{n_k}{N}}\) | \(\large{F_k}\) |
| Total | \(N\) | \(N_k=n\) | \(\large{1}\) | \(\large{1}\) |
Para construir la tabla de frecuencias anterior debemos tener en cuenta los siguientes elementos:
library(tidyverse)
library(jsonlite)
library(DT)
df <- fromJSON('https://raw.githubusercontent.com/lacamposm/Fundamentos_Analitica/main/data/espectro.json')
datatable(df)
temp <- df %>% select(c(1:6))
str(temp)
## 'data.frame': 1000 obs. of 6 variables:
## $ nombre_sonda : chr "Bogota_BOSA_2" "Santa_Marta_TERMINAL" "Zipaquira_ZIPA_CONSTRUCTORA" "Armenia_CENTRO" ...
## $ ciudad_departamento : chr "Bogota_BOGOTA" "Santa_Marta_MAGDALENA" "Zipaquira_CUNDINAMARCA" "Armenia_QUINDIO" ...
## $ fecha_medicion : chr "2020-06-30T23:54:00.000" "2020-06-30T23:54:00.000" "2020-06-30T23:54:00.000" "2020-06-30T23:54:00.000" ...
## $ nivel_exposicion_campos: chr "1.11" "2.14" "1.53" "1.51" ...
## $ limite_restrictivo : chr "28" "28" "28" "28" ...
## $ porcentaje_exposicion : chr "3.96" "7.64" "5.46" "5.39" ...
## Vamos a trabajar con la feature 'nivel_exposicion_campos'
df$nivel_exposicion_campos <- as.numeric(df$nivel_exposicion_campos)
min_value = min(df$nivel_exposicion_campos)
max_value = max(df$nivel_exposicion_campos)
sprintf("Mínimo valor: %.2f", min_value)
## [1] "Mínimo valor: 0.00"
sprintf("Máximo valor: %.2f", max_value)
## [1] "Máximo valor: 7.33"
summary(df$nivel_exposicion_campos)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 0.530 1.000 1.509 1.817 7.330
df %>% summarise(min = min(nivel_exposicion_campos),
per_25 = quantile(nivel_exposicion_campos,0.25),
mediana = median(nivel_exposicion_campos),
media = mean(nivel_exposicion_campos),
std = sd(nivel_exposicion_campos),
per_75 = quantile(nivel_exposicion_campos, 0.75),
max = max(nivel_exposicion_campos), .groups="drop")
## min per_25 mediana media std per_75 max
## 1 0 0.53 1 1.50879 1.51972 1.8175 7.33
En este caso tenemos \(1.000\) datos concentrados en el intervalo \([0,7.33]\). Como lo vamos a hacer manualmente, usaremos una partición con \(10\) intervalos. Para hacer esta partición analice el siguiente código:
tb_frec <- temp
tb_frec$nivel_exposicion_campos <- as.numeric(tb_frec$nivel_exposicion_campos)
tb_frec <- tb_frec %>% mutate(Intervalos = cut(nivel_exposicion_campos, breaks=10)) %>%
group_by(Intervalos) %>% summarise(Freq = n())
## Frecuencia acumulada, relativa y relativa acumulada.
tb_frec <- tb_frec %>% mutate(Freq_Acum = cumsum(Freq), Freq_Rela = Freq/nrow(df),
Freq_Rel_Acum = cumsum(Freq/nrow(df)))
datatable(tb_frec)
Lo anterior, es una forma paso a paso de cómo generar una tabla de frecuencias.
En esta sección trabajaremos dos formas de representración de datos agrupados:
Es una gráfica con barras verticales en las que se muestra en el eje \(x\) la división en los intervalos o clases de la variable y la altura de cada barra representa el número de elementos presentes en cada intervalo. Con el módulo pandas, podemos usar el método plot()
hist(df$nivel_exposicion_campos)
Por supuesto podemos generar un mejor plot.
ggplot(df) +
aes(x = nivel_exposicion_campos) +
geom_histogram(bins = 15, color="black", fill="red") +
labs(x = "Intervalos nivel de exposición", y = "Frecuncia", title = "Histogram")+
theme(axis.ticks.y = element_blank())
library(plotly)
p <-ggplot(df) +
aes(x = nivel_exposicion_campos) +
geom_histogram(bins = 15, color="black", fill="skyblue") +
labs(x = "Intervalos nivel de exposición", y = "Frecuencia", title = "Histogram")+
theme(axis.ticks.y = element_blank())
ggplotly(p)